import { convertFileToBase64 } from "@/utils";
// 定义输入和输出的类型
// interface StaffCard {
//   uid: string;
//   lastModified: number;
//   lastModifiedDate: string;
//   name: string;
//   size: number;
//   type: string;
//   percent: number;
//   originFileObj: {
//     uid: string;
//   };
//   status: string;
//   response: {
//     file: {
//       uid: string;
//     };
//   };
// }

// interface TransformedStaffCard {
//   fileName: string;
//   userDocType: string;
//   englishName: string;
//   chineseName: string;
//   company: string;
//   staffNo: string;
//   expireDate: string;
//   data: string;
// }

// 转换函数
// export const transformStaffCardData = async (
//   staffCards: any
// ): Promise<any[]> => {
//   // 使用 Promise.all 来处理所有异步转换
//   const transformedCards = await Promise.all(
//     // staffCards.map(async (card: any) => {
//     //   // 打印 card 对象
//     //   console.log(card, "card");

//       return {
//         fileName: card.name || "", // 使用原始对象的 name 属性
//         userDocType: "ARA_PERMIT", // 根据需求设置类型
//         englishName: "string", // 根据需求设置类型
//         chineseName: "string", // 根据需求设置类型
//         company: "string", // 根据需求设置类型
//         staffNo: "string", // 根据需求设置类型
//         expireDate: "2024-12-08", // 根据需求设置类型
//         // data: await convertFileToBase64(card.originFileObj), // 将文件转换为 Base64
//       };
//     // })
//   );

//   return transformedCards;
// };

// Define the structure for the doc array items
interface DocItem {
  fileName: string;
  data: string;
  userDocType: string;
  [key: string]: any; // Allow additional properties
}

// Define the input data types
interface ArAUploadItem {
  name: string;
  originFileObj?: { uid: string };
}

interface InputData1 {
  ArAupload: ArAUploadItem[];
  englishName: string;
  chineseName: string;
  company: string;
  expireDate: string;
}

interface InputData2 {
  Front: ArAUploadItem[];
  Back: ArAUploadItem[];
  HKAAUpload: ArAUploadItem[];
  undefined: string;
  englishName: string;
  chineseName: string;
  company: string;
  expireDate: string;
}

interface InputData3 {
  name: string;
  originFileObj: { uid: string };
}

// The function to process the data
// 处理数据的函数
export const processData = async (
  data1?: InputData1,
  data2?: InputData2,
  data3?: InputData3[]
): Promise<{ doc: DocItem[] }> => {
  const doc: DocItem[] = [];

  // 提取公共数据，仅在提供 data1 时
  const commonData = data1 && {
    englishName: data1.englishName,
    chineseName: data1.chineseName,
    company: data1.company,
    expireDate: data1.expireDate,
    userDocType: "CREW_CARD",
  };

  // 添加 ArAupload 中的文件，如果提供了 data1
  if (data1 && data1.ArAupload) {
    const filePromises = data1.ArAupload.map(async (file) => ({
      fileName: file.name,
      //@ts-ignore
      data: await convertFileToBase64(file.originFileObj), // 等待转换完成
      ...commonData,
    }));
    const files = await Promise.all(filePromises); // 等待所有文件处理完成
    //@ts-ignore
    doc.push(...files); // 将结果推入 doc 数组
  }
  const commonData2 = data1 && {
    englishName: data1.englishName,
    chineseName: data1.chineseName,
    company: data1.company,
    expireDate: data1.expireDate,
    userDocType: "ARA_PERMIT",
  };
  // 添加 Front、Back 和 HKAAUpload 中的文件，如果提供了 data2
  // 添加 Front 和 Back 的文件，使用 commonData
  if (data2) {
    // const uploadArrays = [data2.Front, data2.Back, data2.HKAAUpload];

    // 处理 Front 和 Back 文件
    const frontAndBackPromises = [data2.Front, data2.Back]
      .flat()
      .map(async (file) => ({
        fileName: file.name,
        userDocType: "ARA_PERMIT",
        //@ts-ignore
        data: await convertFileToBase64(file.originFileObj),
      }));

    // 处理 HKAAUpload 文件
    const hkUploadPromises = data2.HKAAUpload.flat().map(async (file) => ({
      fileName: file.name,
      //@ts-ignore
      data: await convertFileToBase64(file.originFileObj),
      ...commonData2, // 这里使用 commonData2
    }));

    // 等待所有 Front 和 Back 文件处理完成
    const frontAndBackFiles = await Promise.all(frontAndBackPromises);
    //@ts-ignore
    doc.push(...frontAndBackFiles); // 将结果推入 doc 数组

    // 等待所有 HKAAUpload 文件处理完成
    const hkUploadFiles = await Promise.all(hkUploadPromises);
    //@ts-ignore
    doc.push(...hkUploadFiles); // 将结果推入 doc 数组
  }

  // 添加 data3 中的文件，如果提供了 data3
  if (data3) {
    const filePromises = data3.map(async (file) => ({
      fileName: file.name,
      userDocType: "OTHERS",
      //@ts-ignore
      data: await convertFileToBase64(file.originFileObj), // 等待转换完成
    }));
    const files = await Promise.all(filePromises); // 等待所有文件处理完成
    doc.push(...files); // 将结果推入 doc 数组
  }

  return { doc };
};
